package com.eyas.im.client;

import com.eyas.im.protocol.protocol.Protocol;

import java.io.IOException;

public interface SocketClientHandler<T extends Protocol<?>> {
    /**
     * 连接建立成功后触发
     * 注意：这个方法会阻塞Socket Event，不能阻塞过长时间
     */
    void afterConnected();

    /**
     * 当read的数据经过decode解码后，解析成一条完整的数据后，自动触发这个方法
     * @param decodeData 解析后的协议数据
     */
    void onDataDecode(T decodeData);

    /**
     * 写数据
     * @param sendData
     * @param writeCallback 数据写入操作完全结束后触发的回调方法
     */
    TaskCompleteFuture write(T sendData,WriteCallbackFunction writeCallback) throws IOException;

    void flush();

    /**
     * 主动关闭或者被动关闭前执行
     */
    void beforeClose();
}
